package Day_012_T049;

import java.util.*;

/**
 * @author XIAOLIANG
 * @ClassName Solution.java
 * @Description TODO
 * @createTime 2021年01月26日 21:21:00
 * 49. 字母异位词分组
 * 给定一个字符串数组，将字母异位词组合在一起。字母异位词指字母相同，但排列不同的字符串。
 *
 * 示例:
 *
 * 输入: ["eat", "tea", "tan", "ate", "nat", "bat"]
 * 输出:
 * [
 *   ["ate","eat","tea"],
 *   ["nat","tan"],
 *   ["bat"]
 * ]
 * 说明：
 *
 * 所有输入均为小写字母。
 * 不考虑答案输出的顺序。
 * 通过次数160,041提交次数244,803
 * https://leetcode-cn.com/problems/group-anagrams/
 */
public class Solution {
	public List<List<String>> groupAnagrams(String[] strs) {

		//将字符串进行排序 排序后的结果作为key 存入map  若已经存在kay 说明 两者是 异位词

		List<List<String>> list = new ArrayList<>();

		HashMap<String, List<String>> map = new HashMap<>();
		for (String str : strs) {

			char[] chars = str.toCharArray();
			Arrays.sort(chars);
			String keyString = Arrays.toString(chars);

			if(map.get(keyString)==null){
			  List  slist =	new ArrayList<String>();
			  slist.add(str);
				map.put(keyString,slist);
			}else {
				List<String> slist = map.get(keyString);
				slist.add(str);

			}

		}


		Set<String> keys = map.keySet();

		for (String key : keys) {
			List<String> stringList = map.get(key);
			list.add(stringList);
		}

		return list;

	}
}
